// 简单的重命名方法
function ITRename (val) {
  if (!val) {
    return val
  }
  let arr = [
    { value: '["1","10","11"]', label: '硬件服务-机房-空调' },
    { value: '["1","10","12"]', label: '硬件服务-机房-UPS' },
    { value: '["1","10","13"]', label: '硬件服务-机房-配电' },
    { value: '["1","10","14"]', label: '硬件服务-机房-监控' },
    { value: '["1","10","15"]', label: '硬件服务-机房-综合布线' },
    { value: '["1","10","16"]', label: '硬件服务-机房-消防' },
    { value: '["1","10","17"]', label: '硬件服务-机房-其他' },
    { value: '["1","20"]', label: '硬件服务-网络设备' },
    { value: '["1","30"]', label: '硬件服务-服务器设备' },
    { value: '["1","40"]', label: '硬件服务-存储设备' },
    { value: '["1","50"]', label: '硬件服务-安全设备' },
    { value: '["1","60"]', label: '硬件服务-网络摄像机' },
    { value: '["1","70"]', label: '硬件服务-大屏幕显示设备' },
    { value: '["1","80"]', label: '硬件服务-其他硬件' },
    { value: '["200","210"]', label: '软件服务-专用软件' },
    { value: '["200","220","221"]', label: '软件服务-通用软件-网站' },
    { value: '["200","220","222"]', label: '软件服务-通用软件-财务软件' },
    { value: '["200","220","223"]', label: '软件服务-通用软件-数据库' },
    { value: '["200","220","224"]', label: '软件服务-通用软件-操作系统' },
    { value: '["200","220","225"]', label: '软件服务-通用软件-中间件' },
    { value: '["200","220","226"]', label: '软件服务-通用软件-杀毒软件' },
    { value: '["200","220","227"]', label: '软件服务-通用软件-其他' },
    { value: '["310"]', label: '云服务' },
    { value: '["320","321"]', label: '线路（流量）租用-互联网' },
    { value: '["320","322"]', label: '线路（流量）租用-业务专网（与互联网物理隔离）' },
    { value: '["320","323"]', label: '线路（流量）租用-业务专网（与互联网逻辑隔离）' },
    { value: '["320","324"]', label: '线路（流量）租用-政务外网' },
    { value: '["320","325"]', label: '线路（流量）租用-政务内网' },
    { value: '["320","326"]', label: '线路（流量）租用-流量卡' },
    { value: '["320","327"]', label: '线路（流量）租用-卫星通信' },
    { value: '["320","328"]', label: '线路（流量）租用-其他' },
    { value: '["330"]', label: '数据服务' },
    { value: '["340"]', label: '巡检服务' },
    { value: '["350","351"]', label: '安全服务-等保测评' },
    { value: '["350","352"]', label: '安全服务-分保测试' },
    { value: '["350","353"]', label: '安全服务-安全检测' },
    { value: '["350","354"]', label: '安全服务-其他' },
    { value: '["360"]', label: '其他服务' },
    { value: '["320","329"]', label: '互联网' },
    { value: '["320","330"]', label: '政务外网-互联网' },
    { value: '["320","331"]', label: '裸光纤' },
    { value: '["320","332"]', label: '政务外网-裸光纤' },
    { value: '["320","333"]', label: '专线' },
    { value: '["320","334"]', label: '政务外网-专线' },
    { value: '["320","335"]', label: '财务专线' },
    { value: '["320","336"]', label: '机柜' },
    { value: '["320","337"]', label: '流量卡' },
    { value: '["320","338"]', label: '卫星' },
    { value: '["320","339"]', label: '电话费' },
    { value: '["320","340"]', label: '短信' },
    { value: '["320","341"]', label: '数字中继' },
    { value: '["320","342"]', label: '网络电视' }]
  let name = ''
  arr.forEach(item => {
    if (item.value.indexOf(val) > -1) {
      name = item.label
      return false
    }
  })

  return name
}
// 数组的除重,不好用，有空再写一个
function getUnique (array) {
  let obj = {}
  return array.filter((item, index) => {
    // 防止key重复
    let newItem = item + JSON.stringify(item)
    return obj.hasOwnProperty(newItem) ? false : obj[newItem] = true
  })
}
// 自定义排序(大=》小)
function getOrderAsc (array, name) {
  let newArr = array
  newArr.forEach(item => {
    if (!item[name]) {
      item[name] = 0
    }
  })
  return newArr.sort((a, b) => b[name] - a[name])
}
// 验证小数
const isFloat = (rule, value, callback) => {
  const regex = /^\d*(?:\.\d{0,4})?$/
  if (!value && value != 0) {
    if (!rule.required) {
      return callback()
    } else {
      return callback(new Error('不能为空'));
    }
  } else {
    let float = parseFloat(value)
    if (regex.test(float)) {
      return callback()
    } else {
      return callback(new Error('格式不正确'));
    }
  }
}
// 整数验证
const isNum = (rule, value, callback) => {
  const regex = /^\+?[1-9]\d*$/
  if (!value && value != 0) {
    if (!rule.required) {
      return callback()
    } else {
      return callback(new Error('不能为空'));
    }
  } else {
    let num = parseInt(value)
    if (regex.test(num)) {
      return callback()
    } else {
      return callback(new Error('格式不正确'));
    }
  }
}

/*
 1.系统时间转yyyy-MM-dd
 2.字符串直接截取前10位
 3.查完就往外抛，格式还不统一,难受！！！
 */
const formatDate = (date, type) => {
  let newDate = date
  let newtype = type || 'yyyy-MM-dd'
  if (!newDate) {
    // 空返回空
    return ''
  } else if (typeof newDate === 'number') {
    // 毫秒处理
    newDate = new Date(newDate)
  } else if (typeof newDate === 'string') {
    // 有的是字符串，直接截取前10位
    return newDate.slice(0, 10)
  }
  // 合格的日期开始进行处理
  let opt = {
    'yyyy': newDate.getFullYear().toString(), // 年
    'MM': (newDate.getMonth() + 1).toString(), // 月
    'dd': newDate.getDate().toString(), // 日
    'hh': newDate.getHours().toString(), // 时
    'mm': newDate.getMinutes().toString(), // 分
    'ss': newDate.getSeconds().toString() // 秒
    // 有其他格式化字符需求可以继续添加，转化成字符串
  }
  // 遍历
  for (let k in opt) {
    //匹配关键字 
    if (newtype.indexOf(k) > -1) {
      // 长度补充
      if (opt[k].length === 1) opt[k] = '0' + opt[k]
      // 替换
      newtype = newtype.replace(k, opt[k])
    }
  }
  return newtype
}
// 运维填报软硬件code编码新规则，原来code+4位数字（0001-device_num）
const code4 = (code) => {
  console.log(code.length, '===');
  if (code.length == 1) {
    console.log('11');
    return '0001~000' + code
  } else if (code.length == 2) {
    console.log('2');
    return '0001~00' + code
  } else if (code.length == 3) {
    console.log('3');
    return '0001~0' + code
  } else if (code.length == 4) {
    console.log('4');
    return '0001~' + code
  }
}
// s:传入的float数字 ，n:希望返回小数点几位
const fmoney = (s, n) => {
  n = n > 0 && n <= 20 ? n : 2
  s = parseFloat((s + '').replace(/[^\d\.-]/g, '')).toFixed(n) + ''
  var l = s.split('.')[0].split('').reverse()
  var r = s.split('.')[1]
  let t = ''
  for (let i = 0; i < l.length; i++) {
    t += l[i] + ((i + 1) % 3 === 0 && (i + 1) != l.length ? ',' : '')
  }
  return t.split('').reverse().join('') + '.' + r
}
// 数组转字符串，逗号拼接  [name:a,name:b] 或 [a,b] => ‘a,b’
const arrToStr = (array, name) => {
  const arrCopy = array
  const nameCopy = name

  let str = ''
  if (nameCopy) {
    arrCopy.forEach(item => {
      str += item[nameCopy] + ','
    })
  } else {
    arrCopy.forEach(item => {
      str += item + ','
    })
  }
  //去掉最后一个逗号
  if (str.length > 0) {
    str = str.substr(0, str.length - 1);
  }
  return str;
}
// 字符串转数组，逗号拼接  ‘a,b’ =>[name:a,name:b] 或 [a,b]
const strToArr = (array, name) => {
  const arrCopy = array
  const nameCopy = name

  let arr = []
  if (nameCopy) {
    let arr1 = arrCopy.split(',')
    arr1.forEach(item => {
      if (item) {
        arr.push(
          { [nameCopy]: item }
        )
      }
    })
  } else {
    let arr1 = arrCopy.split(',')
    arr1.forEach(item => {
      if (item) {
        arr.push(item)
      }
    })
  }
  return arr;
}
// 多维度数组转单维数组
const arrsToArr = (array, name) => {
  const arrCopy = array
  const nameCopy = name

  let arr = []
  if (nameCopy) {
    arrCopy.forEach(item => {
      if (item) {
        arr.push(item[nameCopy])
      }
    })
  }
  return arr;
}
// 验证电话号
const isPhone = (rule, value, callback) => {
  if (!value) {
    return callback(new Error('不能为空'));
  } else {
    const regex = /(^(([0\+]\d{2,3}-)?(0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$)|(^0{0,1}1[3|4|5|6|7|8|9][0-9]{9}$)/
    if (regex.test(value)) {
      return callback()
    } else {
      return callback(new Error('格式不正确'));
    }
  }
}
// 强验证密码
const isPsd = (rule, value, callback) => {
  const getPwdStrength = (value) => {
    let level = 1;
    if (value.length >= 8) {
      level += 5;
    }
    let m = [
      /[a-z]/,
      /[A-Z]/,
      /[\d]/,
      /[^\da-zA-Z]/
    ];
    for (let i = m.length - 1; i >= 0; i--) {
      if (null !== value.match(m[i])) {
        level += 1;
      }
    }
    return level;
  };
  if (!value) {
    return callback(new Error('不能为空'));
  } else {
    let level = getPwdStrength(value);
    if (9 <= level) {
      return callback()
    } else {
      return callback(new Error('密码强度过低'));
    }
  }
}
export default {
  ITRename,
  getUnique,
  getOrderAsc,
  isFloat,
  isNum,
  formatDate,
  code4,
  fmoney,
  arrToStr,
  strToArr,
  arrsToArr,
  isPhone,
  isPsd,
}
